System testing is an important part of quality assurance in software engineering. System tests are typically end-to-end tests, written by test engineers based on scenarios derived from the requirements and use cases of the system under test (SUT). From these scenarios, manual test cases can be created that are performed by human testers to ensure the functional correctness of the SUT.
Test automation aims to automate these manual test cases, so that the tests can be performed repeatedly and in a highly reliable manner on different versions of the SUT, e.g., regression testing. Creating automated system tests can be challenging, e.g., because the test engineers writing system tests have not developed the functionality and need to learn the SUT, and because automating test cases is time consuming and changes in the SUT can often require corresponding changes to some automated tests.
Model based testing (MBT) aims to increase the level of automation in test design by introducing formal behavior models that are used to algorithmically derive test cases. Using MBT, the number of test cases can be more easily adjusted based on an available time frame and targeted coverage goals. Creating and maintaining formal behavior models that are suitable for MBT can require great knowledge of the SUT and the modeling language used for the behavior model, which can prevent the adoption of MBT in industrial software engineering.